# 选择结构
# java：if-else if-else、switch
# python： if-elif-else，没有switch

'''
if 表达式1:
    如果表达式1成立则执行
    如果表达式1成立则执行
    如果表达式1成立则执行
elif 表达式2:
    如果表达式2成立则执行
    如果表达式2成立则执行
    如果表达式2成立则执行
elif 表达式3:
    pass
elif......
else:
    如果表达式1、表达式2、表达式3......不成立则执行

判断流程：从if开始，依次按照顺序判断 if->elif->elif->......->else
如果有一个表达式成立，则立即执行对应的代码块，然后后续表达式直接跳过，不会再进行判断
'''

# 根据年龄判断是否成年
age = -1
if age < 0 or age > 200:  # 如果有多个条件需要一起判断可以使用 and与 or或 ^异或 连接
    print("年龄不符合规范")
elif age < 18:
    print("未成年")
elif age >= 18:
    print("成年")
elif age == 18:  # 等值判断需要使用两个等于号，因为一个等号表示赋值
    print("18岁")
else:
    pass  # 表示什么都不干
print("判断完毕")

# 判断分数是否为优秀90 良好80 一般70 及格60 不及格<60
# 写表达式的时候一定要注意边界以及表达式的先后顺序
score = 60
if 90 <= score:
    print("优秀")
elif 80 <= score:
    print("良好")
elif 70 <= score:
    print("一般")
elif 60 <= score:
    print("及格")
elif score < 60:
    print("不及格")

# while循环结构
"""
while 表达式1:
    while循环体
    while循环体
    while循环体
    while循环体
    while循环体
"""

# 计算1~100的和
sum = 0  # 保存最后的结果
count = 1  # 计数
while count <= 100:
    sum = sum + count  # sum += count
    count = count + 1  # count += 1 # 在Java中可以写成count++ 在Python中没有++ --
print(sum)

# break continue
sum = 0  # 保存最后的结果
count = 1  # 计数
while count <= 100:
    sum = sum + count  # sum += count
    if count == 50:  # 加到50的时候停止
        break  # 跳出循环
    count = count + 1  # count += 1 # 在Java中可以写成count++ 在Python中没有++ --
print(sum)

# 计算1~100的奇数的和
sum = 0  # 保存最后的结果
count = 1  # 计数
while count <= 100:
    # if count % 2 == 1:
    #     sum = sum + count  # sum += count
    # count = count + 1  # count += 1 # 在Java中可以写成count++ 在Python中没有++ --
    if count % 2 == 0:
        count = count + 1
        continue  # 跳过本次循环，直接开始下一次循环
    sum = sum + count
    count = count + 1
print(sum)

# for循环
# 一般用于遍历容器，很少用于循环
'''
for 变量 in 容器: # 将容器中的元素依次赋给变量
    for循环体
    for循环体
    for循环体
'''
# 遍历list
list1 = [1, 2, 3, 4]
for i in list1:
    print(i)

# 遍历tuple
tuple1 = (1, 2, 3, 4)
for i in tuple1:
    print(i)

# 遍历字典
dict1 = {
    "k1": "v1",
    "k2": "v2",
    "k3": "v3"
}
for i in dict1:  # 直接遍历只能获取到dict的key
    print(i)

for v in dict1.values():  # 使用values方法可以获取dict的所有的value
    print(v)

for i in dict1.items():  # 使用items方法再进行遍历 可以获取到有k:v组成的tuple
    print(i, type(i))

for k, v in dict1.items():  # 使用items方法，通过两个变量一起接收可以分别拿到k:v
    print(k, v)

# 遍历集合
set1 = {1, 2, 2, 3, 3, 3, 4, 5, 6, 7}
for s in set1:  # 遍历出来的结果是去重后的
    print(s)

# 列表推导式
# 定义一个包含 1~100的list
list2 = [1, 2, 3, 4, 5, 6]  # 穷举 比较麻烦
list3 = []  # 使用range函数以及for循环 但是还是不够精简
for i in range(1, 101):
    list3.append(i)
print(list3)

list4 = [i for i in range(1, 101)]  # 列表推导式
print(list4)

# 定义一个包含 1~100的所有的偶数的list
list3 = []  # 使用range函数以及for循环 再通过if条件筛选偶数
for i in range(1, 101):
    if i % 2 == 0:
        list3.append(i)
print(list3)

list4 = [i for i in range(1, 101) if i % 2 == 0]  # 列表推导式
print(list4)

# 9 9 乘法表
for i in range(1, 10):
    for j in range(1, i + 1):
        strFormat = "{} * {} = {}"
        print(strFormat.format(i, j, i * j), end=" ")
    print()

for i in range(1, 10):
    # for j in range(1, i + 1):
    #     print("{} * {} = {}".format(i,j,i*j), end=" ")
    print("\t".join(["{} * {} = {}".format(i, j, i * j) for j in range(1, i + 1)]))

print("\n".join(["\t".join(["{} * {} = {}".format(i, j, i * j) for j in range(1, i + 1)]) for i in range(1, 10)]))
